package demo;


import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class MyServiceClient {


    //其实就是一个死循环 不停检测IO事件，处理事件 执行任务
    private static final EventLoopGroup bossGroup = new NioEventLoopGroup();
    private static final EventLoopGroup workerGroup = new NioEventLoopGroup();

    public static void main(String[] args) throws Exception {
        try {

            //服务端的启动辅助类 通过给它试着一些列参数来绑定启动服务
            ServerBootstrap bootstrap = new ServerBootstrap();
            //我们需要两种类型的人干活。一个是老板，一个是工人，老板负责从外面接活，接到的活分配给工人干，分配到这里。
            // bossGroup的作用 就是不断的accept到新的连接，讲新的连接丢给workerGroup 处理
            bootstrap.group(bossGroup, workerGroup);
            //表示服务端启动的是nio 相关的channel  channel 在netty里面 是一大核心概念 ，可以理解为一条channel 就是一条连接或者一个服务端的bind动作
            bootstrap.channel(NioServerSocketChannel.class);
            //表示服务器启动过程中经过哪些流程
          //  bootstrap.handler(new MyServerHandler());
            //表示一条心的连接进来之后，怎么处理，也就是 老板如何给工人配活
            bootstrap.childHandler(new MyServerInitailizer());
            //真正的启动
            ChannelFuture future = bootstrap.bind(8888).sync();
            future.channel().closeFuture().sync();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭循环组
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}

